<?php

// 迭代器模式
// 提供一种[顺序]访问一个聚合对象中的各个元素，又不暴露该对象内部表示。将迭代顺序抽象化

require_once '../autoload.php';

$aggregate = new ConcreteAggregate([
    'a', 'b', 'c', 'd', 'e'
]);

$iterator = new ConcreteIterator($aggregate);

fwrite(STDOUT, $iterator->first() . "\n");

while (!$iterator->isDone()) {
    fwrite(STDOUT, $iterator->next() . "\n");
}

// 建立迭代器抽象类的原因是保持迭代顺序的多样性